// import { HttpClient as HttpClientBrowser } from 'tsrpc-browser';
// import { HttpClient as HttpClientMiniapp } from 'tsrpc-miniapp';
// import { HttpClientTransportOptions } from 'tsrpc-browser';
// import { ApiReturn } from 'tsrpc-browser';
// import { Loger } from "../loger/Loger";
// import { GlobalConfig } from "../../GlobalConfig";
// import { ServiceType, serviceProto } from "./../../shared/protocols/serviceProto";
// import { EncryptUtil } from "./../../shared/models/EncryptUtil";
// import { WxUtils } from "../wx/WxUtils";
// import * as cc from 'cc';

// const CookieStorageKey = "TsrpcCookieStorageKey"
// /**tsrpc框架调用工具类 */
// export class TsrpcUtils{


//     private static instance: HttpClientMiniapp<ServiceType> | HttpClientBrowser<ServiceType>

//     public static getInstance(){
//         if (!TsrpcUtils.instance) {
            
//             if (WxUtils.isWx()) {
//                 // 微信小程序使用 tsrpc-miniapp
//                 TsrpcUtils.instance = new HttpClientMiniapp(serviceProto, {
//                   server: GlobalConfig.gameServerUrl,
//                   json: false,
//                 })
//             }else{
//                 // 浏览器和原生环境使用 tsrpc-browser (XMLHttpRequest 兼容的环境都可以使用 tsrpc-browser)
//                 TsrpcUtils.instance = new HttpClientBrowser(serviceProto, {
//                     server: GlobalConfig.gameServerUrl,
//                     json: false,
//                 });
//             }
//             TsrpcUtils._initEncrypt();
//             TsrpcUtils._initSession();
//         }
//         return TsrpcUtils.instance;
//     }


//     /**初始化消息加密方法 */
//     private static _initEncrypt() {
//         // 发送前加密
//         TsrpcUtils.instance.flows.preSendDataFlow.push(v => {
//             if (v.data instanceof Uint8Array) {
//                 v.data = EncryptUtil.encrypt(v.data);
//             }
//             return v;
//         });
//         // 接收前解密
//         TsrpcUtils.instance.flows.preRecvDataFlow.push(v => {
//             if (v.data instanceof Uint8Array) {
//                 v.data = EncryptUtil.decrypt(v.data);
//             }
//             return v;
//         })
//     }

//     private static _initSession(){
//         TsrpcUtils.instance.flows.preApiReturnFlow.push(v => {
//             if (v.return.isSucc) {
//                 if (v.return.res.__cookie) {
//                     localStorage.setItem(CookieStorageKey, JSON.stringify(v.return.res.__cookie))
//                 }
//             }

//             return v;
//         })
//         TsrpcUtils.instance.flows.preCallApiFlow.push(v => {
//             let cookieStr = localStorage.getItem(CookieStorageKey);
//             v.req.__cookie = cookieStr ? JSON.parse(cookieStr) : undefined;
//             return v;
//         })
//     }

//     /**调用服务器接口 */
//     public static async callApi<T extends string & keyof ServiceType['api']>(apiName: T, req: ServiceType['api'][T]['req'], options?: HttpClientTransportOptions): Promise<ApiReturn<ServiceType['api'][T]['res']>>{

//         if (GlobalConfig.openLog || cc.sys.platform == cc.sys.Platform.DESKTOP_BROWSER) {
//             const logObj = {
//                 ApiName:apiName,
//                 req:req,
//                 options:options
//             }
//             Loger.logNet(`=================C2S=================\n${JSON.stringify(logObj, null, 4)}`);            
//         }
//         let ret = await TsrpcUtils.getInstance().callApi(apiName,req,options)
//         Loger.logNet(`=================S2C=================\n${JSON.stringify(ret,null,4)}`);
//         // 处理错误，异常分支
//         if (!ret.isSucc) {
//             Loger.error('Error: ' + ret.err.message);
//         }
//         return ret
//     }
// }